package com.hspedu.udp;

import java.io.IOException;
import java.net.*;

/**
 * @author DL5O
 * @version 1.0
 */
public class UDPReceiverA {
    public static void main(String[] args) throws IOException {
        //1.创建一个DatagramSocket 对象，准备在 9999接受数据
        DatagramSocket socket = new DatagramSocket(9999);
        //2.构建一个DatagramPacket 对象，准备接收数据
        //3.udp最大一次接受 64kb 的数据
        byte[] buf = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buf, buf.length);
        System.out.println("9999端口:等待接受数据...");
        //4.准备调用receive，将通过网络传输的datagramPacket 对象
        //  填充到packet对象中去
        try {
            //会在9999端口等待，当有数据包发送到本机的9999端口时，这个方法就会接受到数据到packet中
            //如果没有数据包发送到 本机的9999端口时，就会阻塞
            socket.receive(packet);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("9999端口:数据接受中...");

        //5.进行拆包操作，取出数据并显示
        int length = packet.getLength();//实际接受到的数据长度
        byte[] data = packet.getData();
        String info = new String(data, 0, length);
        System.out.println(info);


        //发送消息给b
        System.out.println("9999端口:发送数据");
        data = "好的知道了，明天见".getBytes();
        packet = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.1.101"), 9998);
        socket.send(packet);
        System.out.println("9999端口:发送完毕");
        //关闭资源
        socket.close();
        System.out.println("A端关闭");
    }
}
